###########################################################################
# $Id: dbModelsJSONEncoder.p 15 2009-04-24 04:14:14Z donbeave $
###########################################################################

@CLASS
dbModelsJSONEncoder

@USE
labour/converters/labourJSONEncoder.p

@BASE
labourJSONEncoder

#----- Static constructor -----

@auto[]
  $self._encoder[^dbModelsJSONEncoder::create[]]

  ^register[]

#----- Constructor -----

@create[hshOptions]
  ^BASE:create[$hshOptions]

#----- Public -----

@encode[altData]
  $result[^hash::create[]]

  ^if($altData is dbItem){
    $result.name[$altData.name]
  }

  ^switch[$altData.CLASS_NAME]{
    ^case[dbSchema]{
      $result.tablesCount($altData.tablesCount)
    }
    ^case[dbTable]{
      $result.fieldsCount($altData.fieldsCount)
    }
    ^case[dbNumberField;dbStringField]{
      $result.type[$altData.type]
      $result.length($altData.length)
    }
  }

  $result[^baseEncoder.encode[$result]]

@register[]
  ^use[labour/converters/labourJSON.p]

  ^labourJSON:registerEncoder[dbSchema;$_encoder]

  ^labourJSON:registerEncoder[dbTable;$_encoder]

  ^labourJSON:registerEncoder[dbNumberField;$_encoder]
  ^labourJSON:registerEncoder[dbStringField;$_encoder]
  ^labourJSON:registerEncoder[dbDateTimeField;$_encoder]